查看原文
其他

特征选择一

小石头 66号学苑 2022-11-25

建模时如果特征过多容易造成“维度灾难”,降低模型效果,因此特征选择非常重要,本文结合特征重要性和特征相关性来挑选特征。


衡量特征重要性有很多方法,如统计变量IV值、Gini值等,还可以通过一些模型如决策树、随机森林等得到特征的重要性importance等方法,以上方法主要是采取监督方法(即X变量对Y变量的重要性)来衡量变量的预测力。此外特征之间的相关性分析属于特征选择的非监督方法。下面以IV值和相关性结合为例进行介绍。


首先计算特征的IV,计算方法和代码在之前的文章中有介绍,Python计算IV值,计算结果存在数据框iv_df中,如下图:



然后计算特征之间的相关系数,计算结果存在数据框corr_mat中,如下图:



最后,通过IV值和相关系数的结合选择特征,算法如下:


(1)剔除IV值<iv_thred的特征,剔除特征放入列表except_var,并对iv_df按IV值降序排列;


(2)按IV值从大到小选择iv_df中特征Var,若特征Var不在except_var中,则将Var放入列表remain_var;


(3)剔除与Var相关系数大于cor_thred的特征,并将剔除特征加入列表except_var;


(4)重复步骤(2)和(3),直至结束,则列表remain_var中的特征即为选择的特征。


python代码如下,其中cormat是相关系数数据框,iv_df是IV值数据框,cor_thred是相关系数的阈值,iv_thred是IV值阈值。


def Feature_Select_cor_iv(cormat, iv_df, cor_thred, iv_thred): except_var = set(iv_df['Var'][(~iv_df['Var'].isin(cormat.index)) | (iv_df['Iv']<iv_thred)]) iv_df = iv_df.sort_values(by=['Iv'], ascending=[False]) remain_var = [] for var in iv_df.Var: if var in except_var: continue else: corr = cormat.loc[(cormat[var]>cor_thred) & (cormat[var]<1), var] except_var = except_var.union(set(corr.index)) remain_var.append(var) except_var = list(except_var) return remain_var, except_var

br


根据上面得到的cor_mat和iv_df,运行该代码:


remain_vars, ex_vars = Feature_Select_cor_iv(corr_mat, iv_df, 0.7, 0.03)

br


得到remain_vars,选出了预测力最强且相关性较弱的18个特征。



可以验证一下相关系数是否大于0.7,如下图,不同特征之间的相关系数<0.7。




来源|大数据风控的一点一滴

作者|小石头





更多精彩,戳这里:


|这是一份可以让你很牛很牛的风控技能包|

|40页PPT详解金融业智能反欺诈的应用|

|Vintage、滚动率、迁移率的应用|

|一份最全风控产品质量监控(PQR)总结|

|电商及社交数据在金融反欺诈领域的应用|




您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存